home *** CD-ROM | disk | FTP | other *** search
- /* uLinMath.h */
- #ifndef _ULINMATH_H_
- #define _ULINMATH_H_ 1
- /*
- * Copyright (c) 1993, 1994, Silicon Graphics, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that (i) the above copyright notices and this
- * permission notice appear in all copies of the software and related
- * documentation, and (ii) the name of Silicon Graphics may not be
- * used in any advertising or publicity relating to the software
- * without the specific, prior written permission of Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL,
- * INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
- * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY
- * THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
- #include "uSmoke.h"
-
- #define FloatIsNonZero(f) ((f<1.0e-37)?0:1)
-
- #define uMAX(a,b) (a < b)?b:a
- #define uMIN(a,b) (a > b)?b:a
-
- #define uABSlt(a,b) ((a)<(b) && -(a)<(b))
-
- #define uCopyVec2(d,s) d[0]=s[0]; d[1]=s[1]
-
- #define uCopyVec3(d,s) d[0]=s[0]; d[1]=s[1]; d[2]=s[2]
-
- #define uCopyVec4(d,s) (d)[0]=(s)[0]; (d)[1]=(s)[1]; (d)[2]=(s)[2]; (d)[3]=(s)[3]
-
- #define uSetVec2(d,x,y) d[0]=(x); d[1]=(y)
-
- #define uSetVec3(d,x,y,z) d[0]=(x); d[1]=(y); d[2]=(z)
-
- #define uSetVec4(d,x,y,z,w) d[0]=(x); d[1]=(y); d[2]=(z); d[3]=(w)
-
- #define uAddVec3(d,v1,v2) d[0]=v1[0]+v2[0];d[1]=v1[1]+v2[1];d[2]=v1[2]+v2[2]
-
- #define uSubVec3(d,v1,v2) d[0]=v1[0]-v2[0];d[1]=v1[1]-v2[1];d[2]=v1[2]-v2[2]
-
- #define uScaleVec3(d,_s,v) d[0]=(_s)*v[0]; d[1]=(_s)*v[1]; d[2]=(_s)*v[2]
-
- #define uAddScaledVec3(d,v1,_s,v2) \
- d[0]=v1[0]+(_s)*v2[0];d[1]=v1[1]+(_s)*v2[1];d[2]=v1[2]+(_s)*v2[2]
-
- #define uDotVec3(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
-
- #define uLengthVec3(v) sqrtf(uDotVec3(v,v))
-
- #define uMakeTransMat(_dst, _x, _y, _z) \
- (_dst)[0][0] = 1; \
- (_dst)[0][1] = 0; \
- (_dst)[0][2] = 0; \
- (_dst)[0][3] = 0; \
- (_dst)[1][0] = 0; \
- (_dst)[1][1] = 1; \
- (_dst)[1][2] = 0; \
- (_dst)[1][3] = 0; \
- (_dst)[2][0] = 0; \
- (_dst)[2][1] = 0; \
- (_dst)[2][2] = 1; \
- (_dst)[2][3] = 0; \
- (_dst)[3][0] = (_x); \
- (_dst)[3][1] = (_y); \
- (_dst)[3][2] = (_z); \
- (_dst)[3][3] = 1;
-
-
- #define uMakeScaleMat(_dst, _s1, _s2, _s3) \
- (_dst)[0][0] = (_s1); \
- (_dst)[0][1] = 0; \
- (_dst)[0][2] = 0; \
- (_dst)[0][3] = 0; \
- (_dst)[1][0] = 0; \
- (_dst)[1][1] = (_s2); \
- (_dst)[1][2] = 0; \
- (_dst)[1][3] = 0; \
- (_dst)[2][0] = 0; \
- (_dst)[2][1] = 0; \
- (_dst)[2][2] = (_s3); \
- (_dst)[2][3] = 0; \
- (_dst)[3][0] = 0; \
- (_dst)[3][1] = 0; \
- (_dst)[3][2] = 0; \
- (_dst)[3][3] = 1;
-
- #define uSetMatRowVec3(_m, _r, _v) \
- (_m)[(_r)][0] = (_v)[0]; \
- (_m)[(_r)][1] = (_v)[1]; \
- (_m)[(_r)][2] = (_v)[2];
-
- /* m = I */
- #define uMakeIdentMat(m)\
- m[0][0] = 1.0f;\
- m[0][1] = 0.0f;\
- m[0][2] = 0.0f;\
- m[0][3] = 0.0f;\
- m[1][0] = 0.0f;\
- m[1][1] = 1.0f;\
- m[1][2] = 0.0f;\
- m[1][3] = 0.0f;\
- m[2][0] = 0.0f;\
- m[2][1] = 0.0f;\
- m[2][2] = 1.0f;\
- m[2][3] = 0.0f;\
- m[3][0] = 0.0f;\
- m[3][1] = 0.0f;\
- m[3][2] = 0.0f;\
- m[3][3] = 1.0f;
-
-
- #define _SQUARE(a) ((a)*(a))
-
- #define _ETA 1.0e-5f
- #define _HUGEVAL 3.40282347e+37f
-
- float uNormalizeVec3(uVec3 vec);
- void uCrossVec3(uVec3 dst, const uVec3 v1, const uVec3 v2);
- void uXformVec3(uVec3 dst, const uVec3 v, const uMatrix m);
- void uTransposeMat(uMatrix dst, const uMatrix m);
- void uSinCos(float d,float *s, float *c);
- void uMakeRotMat(uMatrix m, float degrees, float x, float y, float z);
- void uPostMultMat(uMatrix dst, const uMatrix m);
- void uMakeRotOntoMat(uMatrix m, const uVec3 v1, const uVec3 v2);
- void uXformPt3(uVec3 dst, const uVec3 v, const uMatrix m);
-
- #endif /* _ULINMATH_H_ */
-